package test2.activemq;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;

public class Consumer {
	
	public static void main(String[] args) throws JMSException {
		ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("admin", "123456", "tcp://localhost:61616");
		// 创建Session，参数解释：
        // 第一个参数是否使用事务:当消息发送者向消息提供者（即消息代理）发送消息时，消息发送者等待消息代理的确认，没有回应则抛出异常，消息发送程序负责处理这个错误。
        // 第二个参数消息的确认模式：
        // AUTO_ACKNOWLEDGE ： 指定消息提供者在每次收到消息时自动发送确认。消息只向目标发送一次，但传输过程中可能因为错误而丢失消息。
        // CLIENT_ACKNOWLEDGE ： 由消息接收者确认收到消息，通过调用消息的acknowledge()方法（会通知消息提供者收到了消息）
        // DUPS_OK_ACKNOWLEDGE ： 指定消息提供者在消息接收者没有确认发送时重新发送消息（这种确认模式不在乎接收者收到重复的消息）。
		Connection conn = factory.createConnection();
		conn.start();
		/**
		 * 开启事务的请求需要将session commit之后才会将消息传递到服务器
		 */
		Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
		Destination destination = session.createQueue("queue");
		MessageConsumer mc = session.createConsumer(destination);
		
//		mc.setMessageListener(new MessageListener() {
//			
//			@Override
//			public void onMessage(Message message) {
//				TextMessage tm = (TextMessage)message;
//				try {
//					System.out.println(tm.getText());
//				} catch (JMSException e) {
//					e.printStackTrace();
//				}
//			}
//		});
		
		TextMessage tm = (TextMessage)mc.receive();
		System.out.println(tm.getText());
		
//		session.commit();
		session.close();
		conn.close();
	}

}
